﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MainFrame
{
    public partial class PageTypeSetting : Form
    {
        public PageTypeSetting(string typeVision)
        {
            InitializeComponent(); 
            m_typeVersion = typeVision;
        }
        private string m_typeVersion = "";
        private void PageTypeSetting_Load(object sender, EventArgs e)
        {
         
            groupBox2.Enabled = false;
            groupBox3.Enabled = false;
            groupBox4.Enabled = false;
            groupBox5.Enabled = false;
            groupBox6.Enabled = false;
            groupBox7.Enabled = false;
            groupBox8.Enabled = false;
            tableLayoutPanel3.Enabled = false;
            panel1.Enabled = false;
         
          
            if (!string.IsNullOrEmpty(m_typeVersion) && m_typeVersion.Contains(GlobalVar.char_VersionSpilt))
            {
                var arr_str = m_typeVersion.Split(GlobalVar.char_VersionSpilt);
                if (arr_str.Length > 1)
                {
                    var curType = arr_str[0];
                    var curVersion = arr_str[1];
                    if (!string.IsNullOrEmpty(curType) && !string.IsNullOrEmpty(curVersion))
                    {
                        try
                        {
                            var typeVersion = curType + GlobalVar.char_VersionSpilt + curVersion;
                            var motionConfig = (MotionConfig)SerializeHelper.DeserializeFile<MotionConfig>(GlobalVar.type_path + "\\" + typeVersion + ".tfp", "型号参数");//运动参数反序列化
                            rbn_plate1.Checked = true;
                            rbn_plate2.Checked = false;
                            ParameterToControl(motionConfig);
                            this.rbn_plate1.CheckedChanged += new System.EventHandler(this.rbn_plate1_CheckedChanged);
                        }
                        catch (Exception ex)
                        {
                            displalyInfo.displayErrorMain(ex.StackTrace);
                        }
                    }
                }

            }
        }
        private void rbn_plate1_CheckedChanged(object sender, EventArgs e)
        {
            if (rbn_plate1.Checked)
                SetPosList(tempMotionConfig.Plate1_pos);
            else
                SetPosList(tempMotionConfig.Plate2_pos);
        }
        private MotionConfig tempMotionConfig;
        private void ParameterToControl(MotionConfig motionConfig)
        {
            try
            {
                if (motionConfig == null)
                {
                    motionConfig = new MotionConfig();
                }
                tempMotionConfig = motionConfig;
                #region 撕膜
                if (GlobalVar.motionConfig.Cut_pos == null)
                {
                    GlobalVar.motionConfig.Cut_pos = new List<CutPostion>();
                    var posCutCount = Enum.GetNames(typeof(e_PosCut)).Length;
                    for (int p = 0; p < posCutCount; p++)
                    {
                        GlobalVar.motionConfig.Cut_pos.Add(new CutPostion());
                    }
                }
                nud_cut_WaitX.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜等料位].X;
                nud_cut_WaitY.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜等料位].Y;
                nud_cut_WaitZ.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜等料位].Z;
                nud_cut_WaitR1.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜等料位].R1;
                nud_cut_WaitR2.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜等料位].R2;

                nud_cut_ProX.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜水平位].X;
                nud_cut_ProY.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜水平位].Y;
                nud_cut_ProZ.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜水平位].Z;
                nud_cut_ProR1.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜水平位].R1;
                nud_cut_ProR2.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜水平位].R2;

                nud_cut_ClampX.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.夹膜位].X;
                nud_cut_ClampY.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.夹膜位].Y;
                nud_cut_ClampZ.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.夹膜位].Z;
                nud_cut_ClampR1.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.夹膜位].R1;
                nud_cut_ClampR2.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.夹膜位].R2;

                nud_cut_EndX.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜终点位].X;
                nud_cut_EndY.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜终点位].Y;
                nud_cut_EndZ.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜终点位].Z;
                nud_cut_EndR1.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜终点位].R1;
                nud_cut_EndR2.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜终点位].R2;

                nud_cut_mediumX.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜过度位].X;
                nud_cut_mediumY.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜过度位].Y;
                nud_cut_mediumZ.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜过度位].Z;
                nud_cut_mediumR1.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜过度位].R1;
                nud_cut_mediumR2.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜过度位].R2;

                nud_cut_NGX.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜垃圾位].X;
                nud_cut_NGY.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜垃圾位].Y;
                nud_cut_NGZ.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜垃圾位].Z;
                nud_cut_NGR1.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜垃圾位].R1;
                nud_cut_NGR2.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜垃圾位].R2;

                nud_cut_SafeX.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜安全位].X;
                nud_cut_SafeY.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜安全位].Y;
                nud_cut_SafeZ.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜安全位].Z;
                nud_cut_SafeR1.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜安全位].R1;
                nud_cut_SafeR2.Value = (decimal)GlobalVar.motionConfig.Cut_pos[(int)e_PosCut.撕膜安全位].R2;

                nud_upProZ.Value = (decimal)GlobalVar.motionConfig.ProZ_up;
                nud_downProZ.Value = (decimal)GlobalVar.motionConfig.ProZ_down;
                nud_clamp_delay.Value = (decimal)GlobalVar.motionConfig.clamp_Delay;

                nud_airCutTime.Value = (decimal)GlobalVar.motionConfig.airCutTime;

                #endregion
                #region 飞达
                nud_delayStopFly1.Value = GlobalVar.motionConfig.delayFlyStop1;
                nud_delayStopFly2.Value = GlobalVar.motionConfig.delayFlyStop2;
                nud_Fly1TimeOutAlarm.Value = GlobalVar.motionConfig.Fly1TimeOutAlarm;
                nud_Fly2TimeOutAlarm.Value = GlobalVar.motionConfig.Fly2TimeOutAlarm;
                nud_flyStop1.Value = GlobalVar.motionConfig.FlyStop1;
                nud_flyStop2.Value = GlobalVar.motionConfig.FlyStop2;

                nud_flyAlarmCount1.Value = GlobalVar.motionConfig.fly1_AlarmCount;
                nud_flyAlarmCount2.Value = GlobalVar.motionConfig.fly2_AlarmCount;
                nud_flyCount1.Value = GlobalVar.motionConfig.fly1_Count;
                nud_flyCount2.Value = GlobalVar.motionConfig.fly2_Count;
                nud_flydelayCheck.Value = GlobalVar.motionConfig.flydelayCheck;

                nud_flyAngleEnd1.Value = (decimal)GlobalVar.motionConfig.fly1AngelEnd;
                nud_flyAngleStart1.Value = (decimal)GlobalVar.motionConfig.fly1AngelStart;
                nud_flyAngleUnit1.Value = (decimal)GlobalVar.motionConfig.fly1AngelUnit;
                nud_flyAngleEnd2.Value = (decimal)GlobalVar.motionConfig.fly2AngelEnd;
                nud_flyAngleStart2.Value = (decimal)GlobalVar.motionConfig.fly2AngelStart;
                nud_flyAngleUnit2.Value = (decimal)GlobalVar.motionConfig.fly2AngelUnit;

                nud_fly1Updelay.Value = GlobalVar.motionConfig.fly1Updeley;
                nud_fly2Updelay.Value = GlobalVar.motionConfig.fly2Updeley;
                #endregion
                #region 吸放标
                if (rbn_plate1.Checked)
                    SetPosList(motionConfig.Plate1_pos);
                else
                    SetPosList(motionConfig.Plate2_pos);
                if (motionConfig.LaserNG_pos == null)
                {
                    motionConfig.LaserNG_pos = new List<NGPostion>();
                    for (int p = 0; p < posNGCount; p++)
                    {
                        motionConfig.LaserNG_pos.Add(new NGPostion());
                    }
                }

                nud_NGGetY.Value = (decimal)motionConfig.LaserNG_pos[(int)e_PosNG.NG取工装位].Y;
                nud_NGGetZup.Value = (decimal)motionConfig.LaserNG_pos[(int)e_PosNG.NG取工装位].Zup;
                nud_NGGetZdown.Value = (decimal)motionConfig.LaserNG_pos[(int)e_PosNG.NG取工装位].Zdown;


                nud_NGPutY.Value = (decimal)motionConfig.LaserNG_pos[(int)e_PosNG.NG放工装位].Y;
                nud_NGPutZup.Value = (decimal)motionConfig.LaserNG_pos[(int)e_PosNG.NG放工装位].Zup;
                nud_NGPutZdown.Value = (decimal)motionConfig.LaserNG_pos[(int)e_PosNG.NG放工装位].Zdown;

                nud_scanSafeX1.Value = (decimal)motionConfig.scanSafeX1;
                nud_scanSafeX2.Value = (decimal)motionConfig.scanSafeX2;

                nud_NGLabelZ.Value = (decimal)motionConfig.NGlabelZ;
                #endregion
                #region 飞达
          
                #endregion
              
            }
            catch (Exception ex)
            {
                displalyInfo.displayInfoMain?.Invoke($"ControlToParameter error : {ex}");
            }
        }
        private List<AbsPostion> GetPos()
        {
            var posList = new List<AbsPostion>();
            for (int i = 0; i < posCount; i++)
            {
                posList.Add(new AbsPostion());
            }
            posList[(int)e_Pos.拍照位].X = (double)nud_pos_scanX.Value;
            posList[(int)e_Pos.拍照位].Y = (double)nud_pos_scanY.Value;
            posList[(int)e_Pos.拍照位].Z = (double)nud_pos_scanZ.Value;

            posList[(int)e_Pos.拍照位].R = (double)nud_pos_scanR.Value;

         

            posList[(int)e_Pos.NG放标位].X = (double)nud_pos_NGX.Value;
            posList[(int)e_Pos.NG放标位].Y = (double)nud_pos_NGY.Value;
            posList[(int)e_Pos.NG放标位].Z = (double)nud_pos_NGZ.Value;
            posList[(int)e_Pos.NG放标位].ZHeight = (double)nud_pos_NGZHeight.Value;
            posList[(int)e_Pos.NG放标位].R = (double)nud_pos_NGR.Value;

            posList[(int)e_Pos.OK放标位].X = (double)nud_pos_OKX.Value;
            posList[(int)e_Pos.OK放标位].Y = (double)nud_pos_OKY.Value;
            posList[(int)e_Pos.OK放标位].Z = (double)nud_pos_OKZ.Value;
            posList[(int)e_Pos.OK放标位].ZHeight = (double)nud_pos_OKZHeight.Value;
            posList[(int)e_Pos.OK放标位].R = (double)nud_pos_OKR.Value;

            posList[(int)e_Pos.飞达取标位].X = (double)nud_GetLabelX.Value;
            posList[(int)e_Pos.飞达取标位].Y = (double)nud_GetLabelY.Value;
            posList[(int)e_Pos.飞达取标位].Z = (double)nud_GetLabelZ.Value;
            posList[(int)e_Pos.飞达取标位].ZHeight = (double)nud_GetLabelZHeight.Value;
            posList[(int)e_Pos.飞达取标位].R = (double)nud_GetLabelR.Value;
            return posList;
        }
        private int posCount = 6;
        private int posNGCount = 3;
        private void SetPosList(List<AbsPostion> posList)
        {
            if (posList == null)
            {
                posList = new List<AbsPostion>();
                for (int i = 0; i < posCount; i++)
                {
                    posList.Add(new AbsPostion());
                }
            }
            nud_pos_scanX.Value = (decimal)posList[(int)e_Pos.拍照位].X;
            nud_pos_scanY.Value = (decimal)posList[(int)e_Pos.拍照位].Y;
            nud_pos_scanZ.Value = (decimal)posList[(int)e_Pos.拍照位].Z;

            nud_pos_scanR.Value = (decimal)posList[(int)e_Pos.拍照位].R;

       

            nud_pos_NGX.Value = (decimal)posList[(int)e_Pos.NG放标位].X;
            nud_pos_NGY.Value = (decimal)posList[(int)e_Pos.NG放标位].Y;
            nud_pos_NGZ.Value = (decimal)posList[(int)e_Pos.NG放标位].Z;
            nud_pos_NGZHeight.Value = (decimal)posList[(int)e_Pos.NG放标位].ZHeight;
            nud_pos_NGR.Value = (decimal)posList[(int)e_Pos.NG放标位].R;

            nud_pos_OKX.Value = (decimal)posList[(int)e_Pos.OK放标位].X;
            nud_pos_OKY.Value = (decimal)posList[(int)e_Pos.OK放标位].Y;
            nud_pos_OKZ.Value = (decimal)posList[(int)e_Pos.OK放标位].Z;
            nud_pos_OKZHeight.Value = (decimal)posList[(int)e_Pos.OK放标位].ZHeight;
            nud_pos_OKR.Value = (decimal)posList[(int)e_Pos.OK放标位].R;

            nud_GetLabelX.Value = (decimal)posList[(int)e_Pos.飞达取标位].X;
            nud_GetLabelY.Value = (decimal)posList[(int)e_Pos.飞达取标位].Y;
            nud_GetLabelZ.Value = (decimal)posList[(int)e_Pos.飞达取标位].Z;
            nud_GetLabelZHeight.Value = (decimal)posList[(int)e_Pos.飞达取标位].ZHeight;
            nud_GetLabelR.Value = (decimal)posList[(int)e_Pos.飞达取标位].R;

        }
        private int UpdateLabelPos(e_Pos e_Pos, e_platePro e_Plate)
        {
            try
            {
                var posList = new List<AbsPostion>();
                if (e_Plate == e_platePro.平台1)
                    posList = GlobalVar.motionConfig.Plate1_pos;
                else if (e_Plate == e_platePro.平台2)
                    posList = GlobalVar.motionConfig.Plate2_pos;

                return 1;
            }
            catch (Exception ex)
            {
                displalyInfo.displayErrorMain(ex.Message);
                return -1;
            }
        }

       
    }
}
